home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Tool Chest / Testing & Debugging / Performance tools / 604 Performance / Source Code / 604main.c next >
Encoding:
C/C++ Source or Header  |  1995-10-25  |  7.3 KB  |  363 lines  |  [TEXT/MPCC]

  1. /*
  2.  
  3.     File:        604main.c
  4.  
  5.     Contains:    604 Performance Code
  6.  
  7.     Written by: dgc = Douglas George Clarke
  8.  
  9.     Copyright:    © 1995 by Apple Computer, Inc., All Rights Reserved.
  10.  
  11. */
  12.  
  13. #include <Timer.h>
  14. #include <LowMem.h>
  15.  
  16.  
  17. void GetPMC( long *PMC1, long *PMC2);
  18. void ClearPMC( void);
  19. void SetMMCR0( long    PMC1Select, long PMC2Select, long user, long system);
  20. void SetButton(DialogPtr aDialog, short whichItem, short aValue);
  21. void PadString(Str255 theString);
  22.  
  23. #define kOn 1
  24. #define kOff 0
  25.  
  26. void main( void )
  27. {
  28.     WindowPtr    theWindow;   
  29.     Rect        theRect;
  30.     Boolean        showWindow = false;
  31.     long        loops;
  32.     Str255        aString;
  33.     long        PMC1;
  34.     long        PMC2;
  35.     long        dog = 0;
  36.     EventRecord    event;
  37.     RgnHandle    cursorRgn;
  38.     WindowPtr    window;
  39.     Point        where;
  40.     short        part;
  41.     short        err;
  42.     Boolean        ignore;
  43.     char        key;
  44.     Boolean        gTerminate = FALSE;
  45.     DialogPtr    aDialog;
  46.     short        itemHit;
  47.     short        font;
  48.     Boolean        active = TRUE;
  49.     short        firstTime = 0;
  50.     long        long1 = 1;
  51.     short        radio1 = 3;
  52.     short        **top,**left;
  53.     long        long2 = 1;
  54.     short        radio2 = 13;
  55.     Boolean        user = true;
  56.     Boolean        system = true;
  57.     
  58.     long        radioValues[23] = {0,0,0,1,2,5,7,8,11,12,13,14,15,1,2,5,6,7,9,10,11,12,13};
  59.     
  60.     InitGraf( &qd.thePort ); 
  61.     InitFonts(); 
  62.     InitWindows(); 
  63.     InitMenus(); 
  64.     TEInit(); 
  65.     InitDialogs( 0L );    
  66.     FlushEvents( everyEvent, 0 ); 
  67.     InitCursor(); 
  68.     
  69.     top  = (short **)GetResource('HEX ',2000);
  70.     left = (short **)GetResource('HEX ',2001);
  71.  
  72.     SetRect( &theRect, 0, 0, 180, 80 );
  73.  
  74.     if ((**top  > qd.screenBits.bounds.top) && 
  75.         (**top  < qd.screenBits.bounds.bottom) &&
  76.         (**left > qd.screenBits.bounds.left) &&
  77.         (**left < qd.screenBits.bounds.right))
  78.         OffsetRect(&theRect, **left, **top);
  79.     else
  80.         OffsetRect(&theRect, 50, 50);
  81.     
  82.     theWindow = NewWindow( 0L, &theRect, "\p604 Performance", true, 
  83.                            noGrowDocProc, (WindowPtr)-1L, true, 0 );
  84.  
  85.     ShowWindow( theWindow );
  86.     SetPort( theWindow );
  87.     
  88.     while (true)
  89.     {
  90.         aDialog = GetNewDialog(2000,0L,(WindowPtr)-1);
  91.         SetWTitle((WindowPtr)aDialog,"\pDITL 2000");
  92.         SetButton(aDialog, radio1, kOn);
  93.         SetButton(aDialog, radio2, kOn);
  94.         SetButton(aDialog, 23, user);
  95.         SetButton(aDialog, 24, system);
  96.          
  97.         itemHit = 0;
  98.         while (itemHit != 1 && itemHit != 2)
  99.         {
  100.             ModalDialog(0L,&itemHit);
  101.             
  102.             if (itemHit > 2)
  103.             {
  104.                 if (itemHit < 13)        // radio 1
  105.                 {
  106.                     if (itemHit != radio1)
  107.                     {
  108.                         SetButton(aDialog, radio1, kOff);
  109.                         radio1 = itemHit;
  110.                         SetButton(aDialog, radio1, kOn);
  111.                         long1 = radioValues[radio1];
  112.                     }
  113.                 }
  114.                 else if (itemHit < 23)        // radio 2
  115.                 {
  116.                     if (itemHit != radio2)
  117.                     {
  118.                         SetButton(aDialog, radio2, kOff);
  119.                         radio2 = itemHit;
  120.                         SetButton(aDialog, radio2, kOn);
  121.                         long2 = radioValues[radio2];
  122.                     }
  123.                 }
  124.                 else if (itemHit == 23)
  125.                 {
  126.                     user = ! user;
  127.                     SetButton(aDialog, itemHit, user);
  128.                 }
  129.                 else if (itemHit == 24)
  130.                 {
  131.                     system = ! system;
  132.                     SetButton(aDialog, itemHit, system);
  133.                 }
  134.             }
  135.         
  136.         }
  137.         DisposeDialog(aDialog);
  138.         
  139.         if (itemHit == 2)
  140.             return;
  141.         
  142.         SetMMCR0(long1,long2, user, system);
  143.         
  144.         SetPort( theWindow );
  145.         ClearPMC();
  146.         gTerminate = false;
  147.             
  148.         cursorRgn = NewRgn();                                            //1st time pass WNE an empty region
  149.         while (!gTerminate) 
  150.         {
  151.             if (WaitNextEvent(everyEvent, &event, 60L, cursorRgn)) 
  152.             {
  153.                 switch (event.what) {
  154.             
  155.                     case mouseDown:
  156.                         part = FindWindow(event.where, &window);
  157.                         switch (part) {
  158.                             case inMenuBar:                                //process the menu command
  159.                                 break;
  160.             
  161.                             case inSysWindow:                            //let system handle the mouseDown
  162.                                 SystemClick(&event, window);
  163.                                 break;
  164.             
  165.                             case inContent:
  166.                                 if ((window != FrontWindow()))
  167.                                 {
  168.                                     SelectWindow(window);
  169.                                     firstTime = 0;
  170.                                 }
  171.                                 break;
  172.             
  173.                             case inGoAway:
  174.                                 ExitToShell();
  175.                                 break;
  176.                                 
  177.                             case inDrag:                                //pass screenBits.bounds to get all gDevices
  178.                                 DragWindow(window, event.where, &qd.screenBits.bounds);
  179.                                 **top  = - window->portBits.bounds.top;
  180.                                 **left = - window->portBits.bounds.left;
  181.                                 ChangedResource((Handle)top);
  182.                                 ChangedResource((Handle)left);
  183.                                 break;
  184.             
  185.                         } //switch (part)
  186.                         break; //mouseDown
  187.             
  188.                     case keyDown:
  189.                     case autoKey:
  190.                         window = FrontWindow();
  191.                         key = event.message & charCodeMask;
  192.                         if ((key == 'q') || (key == 'Q')) 
  193.                             ExitToShell();
  194.                         if ((key == 'r') || (key == 'R')) 
  195.                             gTerminate = true;
  196.                         if ((key == 'a') || (key == 'A')) 
  197.                         {
  198.                             aDialog = GetNewDialog(2001,0L,(WindowPtr)-1);
  199.                             ModalDialog(0L,&itemHit);
  200.                             DisposeDialog(aDialog);
  201.                         }
  202.                         break;
  203.             
  204.                     case activateEvt:
  205.                         break;
  206.             
  207.                     case updateEvt:
  208.                         BeginUpdate((WindowPtr)event.message);            //setup the visRgn, clears updateRgn
  209.                         EndUpdate((WindowPtr)event.message);            //restores the visRgn
  210.                         break;
  211.             
  212.                     case diskEvt:
  213.                         break;
  214.             
  215.                     case osEvt:
  216.                         switch (event.message >> 24) {                    //get high byte of message
  217.             
  218.                             case suspendResumeMessage:
  219.                                 firstTime = 0;
  220.                                 if ((event.message & suspendResumeMessage) != 0)
  221.                                 {
  222.                                     active = true;                        //it was a resume event
  223.                                     EraseRect(&(theWindow->portRect));
  224.                                 }
  225.                                 else
  226.                                 {
  227.                                     active = false;                        //it was a suspend event
  228.                                 }
  229.                                 break; //suspendResumeMessage
  230.                         }
  231.                         break; //osEvt
  232.             
  233.                     case kHighLevelEvent:
  234.                         break;
  235.             
  236.                 } //switch (event->what)
  237.             }
  238.                         
  239.             GetFNum("\pMonaco",&font);
  240.             TextFont(font);
  241.             GetPMC( &PMC1, &PMC2);
  242.             ClearPMC( );
  243.     
  244.             if (active)
  245.             {
  246.                 MoveTo( 25, 14 );
  247.                 DrawString( "\pSend Application" );                
  248.     
  249.                 MoveTo( 25, 29 );
  250.                 DrawString( "\pto background" );                
  251.  
  252.                 MoveTo( 25, 44 );
  253.                 DrawString( "\pto gather data." );
  254.                 firstTime = 0;            
  255.             }            
  256.             else if (firstTime < 2)
  257.                 firstTime++;
  258.             else
  259.             {
  260.                 Rect myRect;
  261.                 
  262.                 myRect = theWindow->portRect;
  263.                 
  264.                 EraseRect(&myRect);
  265.  
  266.                 // TITLES        
  267.                 MoveTo( 15, 14 );
  268.                 DrawString( "\pPMC1" );
  269.             
  270.                 MoveTo( 15, 29 );
  271.                 DrawString( "\pPMC2" );
  272.             
  273.                 MoveTo( 15, 44 );
  274.                 DrawString( "\pBig/Small" );
  275.  
  276.                 MoveTo( 15, 59 );
  277.                 DrawString( "\pUpdates" );
  278.  
  279.                 // DATA
  280.                 MoveTo( 90, 14 );
  281.                 NumToString(PMC1, aString);
  282.                 PadString(aString);
  283.                 DrawString( aString );
  284.             
  285.                 MoveTo( 90, 29 );
  286.                 NumToString(PMC2, aString);
  287.                 PadString(aString);
  288.                 DrawString( aString );
  289.             
  290.                 MoveTo( 90, 44 );
  291.                 
  292.                 if (PMC2 > PMC1)
  293.                     if (PMC1 == 0)
  294.                         PMC2 = 0;
  295.                     else
  296.                         PMC2 = PMC2 / PMC1;
  297.                 else
  298.                     if (PMC2 == 0)
  299.                         PMC2 = 0;
  300.                     else
  301.                         PMC2 = PMC1 / PMC2;
  302.                 
  303.                 
  304.                 NumToString(PMC2, aString);
  305.                 PadString(aString);
  306.                 DrawString( aString );
  307.             
  308.                 dog++;
  309.                 MoveTo( 90, 59 );
  310.                 NumToString(dog, aString);
  311.                 PadString(aString);
  312.                 DrawString( aString );
  313.             }
  314.             MoveTo(40, 74 );
  315.             DrawString( "\pR-Reset, A-About");
  316.         }
  317.     }
  318. }
  319.  
  320. void PadString(Str255 theString)
  321. {
  322.     short length;
  323.     short i,j;
  324.     
  325.     length = theString[0];
  326.  
  327.     if (length > 9)
  328.         return;
  329.     
  330.     
  331.     for (i = length, j = 11; i > 0; i--, j--)
  332.     {
  333.         theString[j] = theString[i];
  334.         if ((j == 9 || j == 5) && i != 1)
  335.         {
  336.             j--;
  337.             theString[j] = ',';
  338.         }
  339.     }
  340.     for (i = j; i > 0 ; i--)
  341.         theString[i] =    ' ';
  342.     theString[0] = 11;    
  343. }
  344.  
  345. void SetButton(DialogPtr aDialog, short whichItem, short aValue)
  346. {
  347.      short    itemType;
  348.      Rect    aRect;
  349.      Handle    item;
  350.      
  351.      
  352.     GetDialogItem(aDialog, whichItem, &itemType, &item, &aRect);
  353.     SetControlValue((ControlHandle)item, aValue);
  354. }
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.